Next Greater Element

       
    
    Given an array arr[ ] of size N having distinct elements, the task is to find the next greater element 
    for each element of the array in order of their appearance in the array.
    Next greater element of an element in the array is the nearest element on the right which is greater than 
    the current element.
    If there does not exist next greater of current element, then next greater element for current element 
    is -1.For example, next greater of the last element is always -1
    
    Example 1:

    Input: 
    N = 4, arr[] = [1 3 2 4]
    Output:
    3 4 4 -1
    Explanation:
    In the array, the next larger element to 1 is 3 , 3 is 4 , 2 is 4 and for 4 ? since it doesn't exist, 
    it is -1.

    Example 2:
    Input: 
    N = 5, arr[] [6 8 0 1 3]
    Output:
    8 -1 1 3 -1
    Explanation:
    In the array, the next larger element to 6 is 8, for 8 there is no larger elements hence it is -1,
    for 0 it is 1 , for 1 it is 3 and then for 3 there is no larger element on right and hence -1. 
 
      
      
      

        
        
Code #include<bits/stdc++.h> using namespace std; int main() { int t; cin>>t; while(t--) { int n; int i; cin>>n; long long int a[n]; for(i=0;i<n;i++) cin>>a[i]; stack<long long int>s; vector<long long int>v; for(i=n-1;i>=0;i--) { if(s.size()==0) { v.push_back(-1); } else if(s.size()>0&&s.top()>a[i]) { v.push_back(s.top()); } else if(s.size()>0&&s.top()<=a[i]) { while(s.size()>0&&s.top()<=a[i]) { s.pop(); } if(s.size()==0) { v.push_back(-1); } else { v.push_back(s.top()); } } s.push(a[i]); } for(i=n-1;i>=0;i--) cout<<v[i]<<" "; cout<<endl; } }